The present invention relates to executing software products. More particularly, the present invention relates to managing placement of software product instances on computing resources.
Many modern software products and computing infrastructures incorporate some level of self-management: that is to say, they are able to react to changes in the extant workload (the work that needs to be done), the configuration, and the properties of the system upon which they are hosted. This level of self-awareness makes good sense: human administration costs are high, and in the modern world, some of the lower level drudgery that is a fundamental part of system administration can be automated away.
One important aspect of self-management of software and infrastructures is often referred to as “placement”. Placement is generally determining what software instance to execute where and when. For example, in the case of an Infrastructure as a Service cloud, placement would refer (amongst other things) to determining where (upon which physical machine) to run a new virtual machine in response to a provisioning request from an end-user. In the case of a clustered application server middleware software product, on the other hand, placement might refer to determining which application servers to start, and which to stop, as the incoming web workload fluctuates. In yet another case, a distributed database might use a placement component to determine how to distribute chunks of data across the various instances of the database, and how to distribute instances of the database across the available machines.